package com.qdlc.p2p.dal.dao.impl;

import java.util.List;

import javax.annotation.Resource;
import javax.persistence.Query;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Repository;

import com.qdlc.p2p.common.constant.Global;
import com.qdlc.p2p.common.constant.RateInterestStatus;
import com.qdlc.p2p.common.util.DateUtil;
import com.qdlc.p2p.dal.common.dao.jpa.BaseDaoImpl;
import com.qdlc.p2p.dal.common.model.jpa.PageDataList;
import com.qdlc.p2p.dal.dao.RateInterestDao;
import com.qdlc.p2p.dal.dto.RateInterest;
import com.qdlc.p2p.dal.model.RateInterestModel;
import com.qdlc.p2p.dal.mybatis.model.mapper.RateInterestMapper;
import com.qdlc.p2p.dal.mybatis.pager.PageProxyBuilder;
import com.qdlc.p2p.dal.mybatis.pager.core.PageParameter;

/**
 * 用户获得加息券记录DAO接口
 * @author wj
 * @version 2.0
 * @since 2015-04-22
 */
@Repository("rateInterestDao")
public class RateInterestDaoImpl extends BaseDaoImpl<RateInterest> implements RateInterestDao {
	
	private static Logger logger = Logger.getLogger(RateInterestDaoImpl.class);

	@Resource
	RateInterestMapper rateInterestMapper;
	
    @Override
    public RateInterest getRateInterestById(long id) {
    	RateInterest rateInterest = rateInterestMapper.findById(id);
        return rateInterest;
    }

	@Override
	public PageDataList<RateInterestModel> getAllRateInterest(String ruleName, int currentPage, int pageSize) {
		PageProxyBuilder<RateInterestMapper> proxy = PageProxyBuilder.newBuilder(RateInterestMapper.class);
		proxy.setPageParameter(currentPage, pageSize);
		List<RateInterestModel> list = proxy.createProxy().findByRuleName(ruleName);
		PageParameter pageParameter = proxy.getPageParameter();
		PageDataList<RateInterestModel> pageDateList = new PageDataList<RateInterestModel>(pageParameter.convert2Page(), list);
		return pageDateList;
	}

	@Override
	public int updateRateInterest(long id, int status) {
		int count = rateInterestMapper.updateStatusById(id, status);
		return count;
	}

	@Override
	public int countRateInterest(long userId) {
		int count = rateInterestMapper.countByUserId(userId);
		return count;
	}
	
	@Override
	public List<RateInterest> getRateInterestByUId(long userId) {
		List<RateInterest> list = rateInterestMapper.findByUserId(userId, 0);
		return list;
	}

    @Override
    public void rateInterestExpiredDispose() {
        Query query = em.createNativeQuery("update " + Global.DB_PREFIX + "additional_rate_interest set status=:aftStatus  where status=:preStatus and end_time <NOW()");
        query.setParameter("aftStatus", RateInterestStatus.OVERDUE);
        query.setParameter("preStatus", RateInterestStatus.NORMAL);
        int result = query.executeUpdate();
        logger.info("加息券过期执行时间：" + DateUtil.getNow() + ";------》更新总条数：" + result);
    }
}
